package com.h.chatroom.controller;

import com.h.chatroom.pojo.dataobject.Friend;
import com.h.chatroom.pojo.request.AddFriendRequest;
import com.h.chatroom.pojo.response.FriendListResponse;
import com.h.chatroom.service.FriendService;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@Slf4j
@RequestMapping("/friend")
@RestController
public class FriendController {
    @Resource(name = "friendServiceImpl")
    private FriendService friendService;

    @RequestMapping("/friendList")
    @ResponseBody
    public List<FriendListResponse> getFriendList(@NotNull(message = "用户Id不能为空") Integer userId) {
        log.info("获取好友列表");
        return friendService.getFriendList(userId);
    }

    @RequestMapping("/findFriend")
    @ResponseBody
    public List<Friend> findFriend(@NotNull(message = "用户ID不能为空") Integer userId,@NotNull(message = "查询名称不能为空") String name) {
        log.info("查找用户信息，进行添加好友，查找名称为 name = "+ name);
        return friendService.findFriend(userId,name);
    }

    @RequestMapping("/addFriend")
    @ResponseBody
    public void addFriend(@NotNull(message = "用户ID不能为空") Integer userId,@NotNull(message = "朋友ID不能为空") Integer friendId,String reason) {
        log.info("添加好友");
        friendService.addFriend(userId,friendId,reason);
    }

    @RequestMapping("/getFriendRequest")
    @ResponseBody
    public List<AddFriendRequest> getFriendRequest(@NotNull(message = "用户ID不能为空") Integer userId) {
        log.info("获取添加好友的信息，对应的用户id为 = " + userId);
        return friendService.getFriend(userId);
    }

    @RequestMapping("/acceptFriend")
    @ResponseBody
    // 这里需要多次操作数据库，所以需要保持事务的原子性
    @Transactional
    public void acceptFriend(@NotNull(message = "好友ID不能为空") Integer friendId,@NotNull(message = "用户ID不能为空") Integer userId) {
        // 这里的 同意操作 呢，是对于接收到添加好友请求这个信息的 被接收人的操作，也就是 发送给谁的人
        // 这里对于 userId 呢就是 toUserId 这个属性；friendId 呢就是 发送请求的人的Id 也就是 fromUserId
        friendService.acceptFriend(friendId,userId);
    }

    @RequestMapping("/rejectFriend")
    @ResponseBody
    public void rejectFriend(@NotNull(message = "好友ID不能为空") Integer friendId,@NotNull(message = "用户ID不能为空") Integer userId) {
        friendService.rejectFriend(friendId,userId);
    }
}
